package cn.net.cfss.fgbp.api.console.dto;

import cn.net.cfss.fgbp.api.console.constant.UserStatusEnum;
import cn.net.cfss.fgbp.api.console.constant.YesOrNoEnum;
import cn.net.cfss.fgbp.api.console.constant.DeleteFlagEnum;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.FgbpEnumSerializer;
import com.alibaba.fastjson.serializer.ToStringSerializer;

import java.util.Date;
import javax.persistence.*;

@Table(name = "t_sys_user")
public class SysUserDto extends BaseDto {
    /**
     * 用户名
     */
    @Column(name = "USERNAME")
    private String username;

    /**
     * 用户密码
     */
    @Column(name = "PASSWORD")
    @JSONField(serialize=false)
    private String password;

    /**
     * 随机盐
     */
    @Column(name = "SALT")
    @JSONField(serialize=false)
    private String salt;

    /**
     * 用户状态(0-未启用;1-正常;2-锁定;3-注销)
     */
    @Column(name = "USER_STATUS")
    @JSONField(serializeUsing = FgbpEnumSerializer.class)
    private UserStatusEnum userStatus;

    /**
     * 是否集团内部员工(0-否;1-是)
     */
    @Column(name = "IS_INTERNAL_STAFF")
    @JSONField(serializeUsing = FgbpEnumSerializer.class)
    private YesOrNoEnum isInternalStaff;

    /**
     * 最近登录成功时间
     */
    @Column(name = "LAST_LOGIN_SUCC_TIME")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date lastLoginSuccTime;

    /**
     * 连续登录错误次数
     */
    @Column(name = "LOGIN_ERROR_TIMES")
    @JSONField(serialize=false)
    private Integer loginErrorTimes;

    /**
     * 姓名
     */
    @Column(name = "NAME")
    private String name;

    /**
     * 手机号
     */
    @Column(name = "CELL_PHONE")
    private String cellPhone;

    /**
     * 电子邮箱
     */
    @Column(name = "EMAIL")
    private String email;

    /**
     * 头像
     */
    @Column(name = "AVATAR")
    private String avatar;

    /**
     * 备注
     */
    @Column(name = "REMARK")
    private String remark;

    /**
     * 所属服务商
     */
    @Column(name = "SERVICE_PROVIDER")
    @JSONField(serializeUsing = ToStringSerializer.class)
    //@JSONField(serialize=false)
    private Long serviceProvider;

    /**
     * 所属服务商
     */
    @Column(name = "SERVICE_PROVIDER_NAME")
    private String serviceProviderName;

    public SysUserDto() {
        super();
    }

    public SysUserDto(Long id) {
        super();
        this.setId(id);
        this.setDeleteFlag(DeleteFlagEnum.NOT_DEL);
    }

    public Long getServiceProvider() {
        return serviceProvider;
    }

    public void setServiceProvider(Long serviceProvider) {
        this.serviceProvider = serviceProvider;
    }

    /**
     * 获取用户名
     *
     * @return USERNAME - 用户名
     */
    public String getUsername() {
        return username;
    }

    /**
     * 设置用户名
     *
     * @param username
     *            用户名
     */
    public void setUsername(String username) {
        this.username = username == null ? null : username.trim();
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password == null ? null : password.trim();
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    /**
     * 获取用户状态(0-未启用;1-正常;2-锁定;3-注销)
     *
     * @return USER_STATUS - 用户状态(0-未启用;1-正常;2-锁定;3-注销)
     */
    public UserStatusEnum getUserStatus() {
        return userStatus;
    }

    /**
     * 设置用户状态(0-未启用;1-正常;2-锁定;3-注销)
     *
     * @param userStatus
     *            用户状态(0-未启用;1-正常;2-锁定;3-注销)
     */
    public void setUserStatus(UserStatusEnum userStatus) {
        this.userStatus = userStatus;
    }

    /**
     * 获取是否集团内部员工(0-否;1-是)
     *
     * @return IS_INTERNAL_STAFF - 是否集团内部员工(0-否;1-是)
     */
    public YesOrNoEnum getIsInternalStaff() {
        return isInternalStaff;
    }

    /**
     * 设置是否集团内部员工(0-否;1-是)
     *
     * @param isInternalStaff
     *            是否集团内部员工(0-否;1-是)
     */
    public void setIsInternalStaff(YesOrNoEnum isInternalStaff) {
        this.isInternalStaff = isInternalStaff;
    }

    /**
     * 获取最近登录成功时间
     *
     * @return LAST_LOGIN_SUCC_TIME - 最近登录成功时间
     */
    public Date getLastLoginSuccTime() {
        return lastLoginSuccTime;
    }

    /**
     * 设置最近登录成功时间
     *
     * @param lastLoginSuccTime
     *            最近登录成功时间
     */
    public void setLastLoginSuccTime(Date lastLoginSuccTime) {
        this.lastLoginSuccTime = lastLoginSuccTime;
    }

    /**
     * 获取连续登录错误次数
     *
     * @return LOGIN_ERROR_TIMES - 连续登录错误次数
     */
    public Integer getLoginErrorTimes() {
        return loginErrorTimes;
    }

    /**
     * 设置连续登录错误次数
     *
     * @param loginErrorTimes
     *            连续登录错误次数
     */
    public void setLoginErrorTimes(Integer loginErrorTimes) {
        this.loginErrorTimes = loginErrorTimes;
    }

    /**
     * 获取姓名
     *
     * @return NAME - 姓名
     */
    public String getName() {
        return name;
    }

    /**
     * 设置姓名
     *
     * @param name
     *            姓名
     */
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    /**
     * 获取手机号
     *
     * @return CELL_PHONE - 手机号
     */
    public String getCellPhone() {
        return cellPhone;
    }

    /**
     * 设置手机号
     *
     * @param cellPhone
     *            手机号
     */
    public void setCellPhone(String cellPhone) {
        this.cellPhone = cellPhone == null ? null : cellPhone.trim();
    }

    /**
     * 获取电子邮箱
     *
     * @return EMAIL - 电子邮箱
     */
    public String getEmail() {
        return email;
    }

    /**
     * 设置电子邮箱
     *
     * @param email
     *            电子邮箱
     */
    public void setEmail(String email) {
        this.email = email == null ? null : email.trim();
    }

    /**
     * 获取头像
     *
     * @return AVATAR - 头像
     */
    public String getAvatar() {
        return avatar;
    }

    /**
     * 设置头像
     *
     * @param avatar
     *            头像
     */
    public void setAvatar(String avatar) {
        this.avatar = avatar == null ? null : avatar.trim();
    }

    /**
     * 获取备注
     *
     * @return REMARK - 备注
     */
    public String getRemark() {
        return remark;
    }

    /**
     * 设置备注
     *
     * @param remark
     *            备注
     */
    public void setRemark(String remark) {
        this.remark = remark == null ? null : remark.trim();
    }

    public String getServiceProviderName() {
        return serviceProviderName;
    }

    public void setServiceProviderName(String serviceProviderName) {
        this.serviceProviderName = serviceProviderName;
    }
}